package pointers;

/**
 * @author: june
 * @date: 2023/8/17
 * @description: 11. 盛最多水的容器
 * 给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
 * <p>
 * 找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 * <p>
 * 返回容器可以储存的最大水量。
 * <p>
 * 说明：你不能倾斜容器。
 **/

public class ContainersWithMostWater_11 {
    public int maxArea(int[] height) {
        // 双指针分别从头和尾开始遍历，面积等于最短的长 * 宽度，遍历一次后，从较短的边开始向前或者向后遍历，继续计算面积
        int i = 0;
        int j = height.length - 1;

        int area = 0;

        while (i < j) {
            int minHeight = Math.min(height[i], height[j]);
            if (area < minHeight * (j - i)) {
                area = minHeight * (j - i);
            }

            if (height[i] < height[j]) {
                i++;
            } else {
                j--;
            }
        }

        return area;
    }

    public static void main(String[] args) {
        int[] nums = {1, 8, 6, 2, 5, 4, 8, 3, 7};
        ContainersWithMostWater_11 containersWithMostWater11 = new ContainersWithMostWater_11();
        int maxArea = containersWithMostWater11.maxArea(nums);
        System.out.println(maxArea);
    }
}
